"""
使用示例
展示如何使用面向对象重构后的股票图表模块
"""

from stock_chart_app import StockChartApp, create_stock_chart_app, run_stock_chart


def example_1_simple_usage():
    """示例1：简单使用方式"""
    print("示例1：简单使用方式")
    
    # 使用便捷函数直接运行
    file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
    run_stock_chart(file_path, "简单使用示例")


def example_2_advanced_usage():
    """示例2：高级使用方式"""
    print("示例2：高级使用方式")
    
    # 创建应用程序实例
    app = StockChartApp("高级使用示例")
    
    try:
        # 初始化应用程序
        app.initialize_app()
        
        # 加载数据
        file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
        app.load_data(file_path)
        
        # 获取各个组件进行进一步操作
        data_loader = app.get_data_loader()
        kline_chart = app.get_kline_chart()
        volume_chart = app.get_volume_chart()
        
        print(f"数据加载完成，共 {len(data_loader.get_data())} 条记录")
        
        # 运行应用程序
        app.run()
        
    finally:
        # 清理资源
        app.cleanup()


def example_3_customize_charts():
    """示例3：自定义图表"""
    print("示例3：自定义图表")
    
    # 使用便捷函数创建应用程序
    file_path = "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"
    app = create_stock_chart_app(file_path, "自定义图表示例")
    
    try:
        # 获取图表组件进行自定义
        kline_chart = app.get_kline_chart()
        volume_chart = app.get_volume_chart()
        
        # 自定义K线图范围
        min_price, max_price = app.get_data_loader().get_price_range()
        kline_chart.set_price_range(min_price, max_price, padding=0.2)  # 增加边距
        
        # 自定义成交量图范围
        min_volume, max_volume = app.get_data_loader().get_volume_range()
        volume_chart.set_volume_range(min_volume, max_volume, compression_factor=0.3)
        
        # 运行应用程序
        app.run()
        
    finally:
        app.cleanup()


def example_4_multiple_stocks():
    """示例4：多股票对比（使用标签页显示多个股票）"""
    print("示例4：多股票对比")
    
    from multi_window_manager import run_multi_stock_charts
    
    # 股票信息列表
    stocks_info = [
        {"name": "沙隆达A", "path": "F:\\股票数据\\daily20250829\\daily\\000554.SZ.csv"},
        {"name": "平安银行", "path": "F:\\股票数据\\daily20250829\\daily\\000001.SZ.csv"},
        {"name": "万科A", "path": "F:\\股票数据\\daily20250829\\daily\\000002.SZ.csv"}
    ]
    
    try:
        # 使用多窗口管理器运行多股票图表
        run_multi_stock_charts(stocks_info)
        
    except Exception as e:
        print(f"运行多股票图表时出错: {e}")
        import traceback
        traceback.print_exc()


if __name__ == "__main__":
    print("股票K线图模块化版本使用示例")
    print("=" * 50)
    
    # 选择要运行的示例
    examples = {
        "1": example_1_simple_usage,
        "2": example_2_advanced_usage,
        "3": example_3_customize_charts,
        "4": example_4_multiple_stocks
    }
    
    print("请选择要运行的示例:")
    for key, func in examples.items():
        print(f"{key}. {func.__doc__}")
    
    choice = input("请输入选择 (1-4): ").strip()
    
    if choice in examples:
        try:
            examples[choice]()
        except KeyboardInterrupt:
            print("\n程序被用户中断")
        except Exception as e:
            print(f"运行示例时出错: {e}")
            import traceback
            traceback.print_exc()
    else:
        print("无效选择")
